#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QLineEdit>
#include "messageshowarea.h"

#include "selfinfowidget.h"
#include "sessiondetailwidget.h"
#include "sessionfriendarea.h"
#include "model/data.h"
#include "./model/datacenter.h"

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWidget;
}
QT_END_NAMESPACE

class MessageEditArea;

class MainWidget : public QWidget
{
    Q_OBJECT
private:
    static MainWidget* instance;
    MainWidget(QWidget *parent = nullptr);

public:
    static MainWidget* getInstance();
    ~MainWidget();

    enum ActiveTab
    {
        SESSION_LIST,
        FRIEND_LIST,
        APPLY_LIST
    };

    void initLeftWindow();
    void initMidWindow();
    void initRightWindow();
    void initMainWindow();
    void initWebSocket();
    void initSlots();
    MessageShowArea* getMessageShowArea();

    void switchToSession();
    void switchToFriend();
    void switchToApply();

    void switchSession(const QString& userId);

    void loadSessionList();
    void loadFriendList();
    void loadApplyList();
    void loadRecentMessage(const QString& chatSessionId);

    void updateFriendList();
    void updateChatSessionList();
    void updateApplyList();
    void updateRecentMessage(const QString& chatSessionId);


private:
    Ui::MainWidget *ui;

    QWidget* leftWidget;        //左窗口导航栏
    QWidget* midWidget;         //中间窗口列表框
    QWidget* rightWidget;       //右边窗口聊天框

    ActiveTab activeTab = SESSION_LIST; //默认是会话列表显示

    QPushButton* useravatar;    //用户头像
    QPushButton* sessionTabBtn; //会话列表按钮
    QPushButton* friendTabBtn;  //好友列表
    QPushButton* applyFriendTabBtn;   //好友申请列表

    QLineEdit* searchEdit;
    QPushButton* addFriendBtn;

    QPushButton* extraBtn;

    MessageShowArea* messageArea;

    MessageEditArea* messageEditArea;
    SessionFriendArea* sessionArea;

    QLabel* titleLabel;
};
#endif // MAINWIDGET_H
